
class LinkedList {

  public static void main(String[] a) {
    System.out.println(new LL().Start());
  }
}

class Element {

  int Age;
  int Salary;
  boolean Married;

  // Initialize some class variables
  public boolean Init(int v_Age, int v_Salary, boolean v_Married) {
    Age = v_Age;
    Salary = v_Salary;
    Married = v_Married;
    return true;
  }

  public int GetAge() {
    return Age;
  }

  public int GetSalary() {
    return Salary;
  }

  public boolean GetMarried() {
    return Married;
  }

  // This method returns true if the object "other"
  // has the same values for age, salary and
  public boolean Equal(Element other) {
    boolean ret_val;
    int aux01;
    int aux02;
    int nt;
    ret_val = true;

    aux01 = other.GetAge();
    if (!this.Compare(aux01, Age)) {
      ret_val = false;
    } else {
      aux02 = other.GetSalary();
      if (!this.Compare(aux02, Salary)) {
        ret_val = false;
      } else if (Married) {
        if (!other.GetMarried()) {
          ret_val = false;
        } else {
          nt = 0;
        }
      } else if (other.GetMarried()) {
        ret_val = false;
      } else {
        nt = 0;
      }
    }

    return ret_val;
  }

  // This method compares two integers and
  // returns true if they are equal and false
  // otherwise
  public boolean Compare(int num1, int num2) {
    boolean retval;
    int aux02;
    retval = false;
    aux02 = num2 + 1;
    if (num1 < num2) {
      retval = false;
    } else if (!(num1 < aux02)) {
      retval = false;
    } else {
      retval = true;
    }
    return retval;
  }
}

class List {

  Element elem;
  List next;
  boolean end;

  // Initialize the node list as the last node
  public boolean Init() {
    end = true;
    return true;
  }

  // Initialize the values of a new node
  public boolean InitNew(Element v_elem, List v_next, boolean v_end) {
    end = v_end;
    elem = v_elem;
    next = v_next;
    return true;
  }

  // Insert a new node at the beginning of the list
  public List Insert(Element new_elem) {
    boolean ret_val;
    List aux03;
    List aux02;
    aux03 = this;
    aux02 = new List();
    ret_val = aux02.InitNew(new_elem, aux03, false);
    return aux02;
  }

  // Update the the pointer to the next node
  public boolean SetNext(List v_next) {
    next = v_next;
    return true;
  }

  // Delete an element e from the list
  public List Delete(Element e) {
    List my_head;
    boolean ret_val;
    boolean aux05;
    List aux01;
    List prev;
    boolean var_end;
    Element var_elem;
    int aux04;
    int nt;


    my_head = this;
    ret_val = false;
    aux04 = 0 - 1;
    aux01 = this;
    prev = this;
    var_end = end;
    var_elem = elem;
    while ((!var_end) && (!ret_val)) {
      if (e.Equal(var_elem)) {
        ret_val = true;
        if (aux04 < 0) {
          // delete first element
          my_head = aux01.GetNext();
        } else { // delete a non first element
          System.out.println(0 - 555);
          aux05 = prev.SetNext(aux01.GetNext());
          System.out.println(0 - 555);

        }
      } else {
        nt = 0;
      }
      if (!ret_val) {
        prev = aux01;
        aux01 = aux01.GetNext();
        var_end = aux01.GetEnd();
        var_elem = aux01.GetElem();
        aux04 = 1;
      } else {
        nt = 0;
      }
    }
    return my_head;
  }

  // Search for an element e on the list
  public int Search(Element e) {
    int int_ret_val;
    List aux01;
    Element var_elem;
    boolean var_end;
    int nt;

    int_ret_val = 0;
    aux01 = this;
    var_end = end;
    var_elem = elem;
    while (!var_end) {
      if (e.Equal(var_elem)) {
        int_ret_val = 1;
      } else {
        nt = 0;
      }
      aux01 = aux01.GetNext();
      var_end = aux01.GetEnd();
      var_elem = aux01.GetElem();
    }
    return int_ret_val;
  }

  public boolean GetEnd() {
    return end;
  }

  public Element GetElem() {
    return elem;
  }

  public List GetNext() {
    return next;
  }

  // Print the linked list
  public boolean Print() {
    List aux01;
    boolean var_end;
    Element var_elem;

    aux01 = this;
    var_end = end;
    var_elem = elem;
    while (!var_end) {
      System.out.println(var_elem.GetAge());
      aux01 = aux01.GetNext();
      var_end = aux01.GetEnd();
      var_elem = aux01.GetElem();
    }

    return true;
  }
}

// this class invokes the methods to insert, delete,
// search and print the linked list
class LL {

  public int Start() {

    List head;
    List last_elem;
    boolean aux01;
    Element el01;
    Element el02;
    Element el03;

    last_elem = new List();
    aux01 = last_elem.Init();
    head = last_elem;
    aux01 = head.Init();
    aux01 = head.Print();

    // inserting first element
    el01 = new Element();
    aux01 = el01.Init(25, 37000, false);
    head = head.Insert(el01);
    aux01 = head.Print();
    System.out.println(10000000);
    // inserting second  element
    el01 = new Element();
    aux01 = el01.Init(39, 42000, true);
    el02 = el01;
    head = head.Insert(el01);
    aux01 = head.Print();
    System.out.println(10000000);
    // inserting third element
    el01 = new Element();
    aux01 = el01.Init(22, 34000, false);
    head = head.Insert(el01);
    aux01 = head.Print();
    el03 = new Element();
    aux01 = el03.Init(27, 34000, false);
    System.out.println(head.Search(el02));
    System.out.println(head.Search(el03));
    System.out.println(10000000);
    // inserting fourth element
    el01 = new Element();
    aux01 = el01.Init(28, 35000, false);
    head = head.Insert(el01);
    aux01 = head.Print();
    System.out.println(2220000);

    head = head.Delete(el02);
    aux01 = head.Print();
    System.out.println(33300000);


    head = head.Delete(el01);
    aux01 = head.Print();
    System.out.println(44440000);

    return 0;


  }
}
